#!/bin/bash
echo "===== 开始系统调优 ====="
# 设置日志路径
LOG_FILE=/var/log/optimization.log
ERROR_LOG_FILE="/var/log/error_${$.SHELL_VERSION}.log"
# 记录开始时间
start_time=$(date +%s.%N)
# 定义错误处理函数
function log_error() {
    echo "timestamp=`date +%Y-%m-%d\ %H:%M:%S` level=error msg=\"$1\"" >> "$ERROR_LOG_FILE"
}
# 检查日志目录权限并修复
if [ $(ls -ld /var/log/logstash/ | awk '{print $3}') != 'logstash' ]; then
    echo "调整日志文件夹权限为 logstash 用户..."
    chown -R logstash:logstash /var/log/logstash/
    chmod -R 755 /var/log/logstash/
fi
# 检查和修复文件系统错误
echo "检查文件系统错误..."
if ! fsck /dev/sda1 > /dev/null; then
    echo "检测到文件系统错误，正在修复..."
    fsck -y /dev/sda1 >> "$LOG_FILE" 2>&1 || log_error "文件系统修复失败"
fi
# 应用sysctl调优参数以优化文件处理
echo "应用内核参数优化..."
cat << EOF > /etc/sysctl.d/99-logstash.conf
 vfs_cache_pressure = 50
 fs.file-max = 2097152
 fs.inode.max = 4194304
EOF
sysctl -p >> "$LOG_FILE" 2>&1 || log_error "内核参数设置失败"
# 收集优化后的系统指标
echo "收集优化后系统指标..."
CPU_USAGE=$(top -b n 1 | grep ^%Cpu | awk '{sum += $2 + $4; print sum}' | tail -n 1)
MEMORY_USAGE=$(free -m | awk '/Mem:/ {print $3}')
DISK_IO=$(iostat -d -k | awk '/sda/ {print $3}')
# 结构化输出
echo "===== 调优结果 ====="
echo "CPU使用率: ${CPU_USAGE}%"
echo "内存使用量: ${MEMORY_USAGE}MB"
echo "磁盘I/O: ${DISK_IO}KB/s"
# 记录结束时间
end_time=$(date +%s.%N)
duration=$(echo "$end_time - $start_time" | bc)
# 输出性能指标到JSON格式文件
echo "{
    \"执行时间\": \"$duration 秒\",
    \"CPU使用率\": \"$CPU_USAGE%\",\ 
    \"内存使用量\": \"$MEMORY_USAGE MB\",
    \"磁盘I/O\": \"$DISK_IO KB/s\"
}" > /var/log/performance_metrics.json
# 提示脚本完成
echo "===== 调优完成 ====="